#ifndef __TOOLS_H__
#define __TOOLS_H__


#include "includes.h"
#include "ClassDef.h"


/*链表队列相关*/
typedef struct QueNode  //队列内容节点结构体定义
{
  void *data;
  struct QueNode *next;
}QueNode,*PQuekNode;

typedef struct GenQue  //队列结构体定义
{
  int count;
  QueNode *phead;
}GenQue,*PGenQue;


/*链表栈相关*/
typedef struct StkNode  //栈内容节点结构体定义
{
void *data;
struct StkNode *next;
}StkNode,*PStkNode;


typedef struct GenStack  //栈结构体定义
{
int count;
StkNode *phead;
}GenStack,*PGenStack;

/*数组栈相关*/
typedef struct StackArr_t
{
	#define STACK_ARR_NUM 8
	#define STACK_ARR_NUM_MASK (STACK_ARR_NUM - 1)
	
	void * Stack[STACK_ARR_NUM];
	short Tail;  //栈尾索引
}STACK_ARRAY_T;



int Tools_Show_Float_To_CharString(float FValue, char* CValue);

int Tools_Show_Integer_To_CharString( long FValue, char* CValue);

void Linklist_Node_Init(NODE_TYPE* Node);
bool LinklistSingle_Tail_Insert(NODE_TYPE * HeadNode,NODE_TYPE * NodeToInsert);
bool LinklistSingle_Head_Insert(NODE_TYPE * HeadNode,NODE_TYPE * NodeToInsert);
NODE_TYPE * LinklistSingle_Head_PopGet(NODE_TYPE * HeadNode);
bool LinklistSingle_Del_Node(NODE_TYPE * HeadNode,NODE_TYPE * DelNode);
void LinklistSingle_Clear(NODE_TYPE * HeadNode);

bool GenStack_Init(PGenStack ps);
bool GenStack_IsEmpty(PGenStack ps);
int  GenStack_GetLength(PGenStack ps);
bool GenStack_Push(PGenStack ps,PStkNode pnode);
bool GenStack_GetTop(PGenStack ps,PStkNode pnode);
bool GenStack_Pop(PGenStack ps,PStkNode* pnode);
bool GenStack_Distory(PGenStack ps);

bool GenQueue_Init(PGenQue pq);
bool GenQueue_IsEmpty(PGenQue pq);
int  GenQueue_GetLength(PGenQue pq);
bool GenQueue_Insert(PGenQue pq,PQuekNode pnode);
bool GenQueue_Get(PGenQue pq,PQuekNode* pnode);
bool GenQueue_Clear(PGenQue pq);
bool GenQueue_IsExist(PGenQue pq,PQuekNode pnode);

bool StackArr_Init(void);
bool StackArr_Push(void * data);
void * StackArr_Pop(void);
void * StackArr_GetTop(void);

void TEST_SERIAL_PRINT_Float_1(float v1);
void TEST_SERIAL_PRINT_Float_2(float v1,float v2);
void TEST_SERIAL_PRINT_Float_3(float v1,float v2,float v3);
void TEST_SERIAL_PRINT_Float_4(float v1,float v2,float v3,float v4);
void TEST_SERIAL_PRINT_Float_5(float v1,float v2,float v3,float v4,float v5);
void TEST_SERIAL_PRINT_Float_6(float v1,float v2,float v3,float v4,float v5,float v6);

void Test_GenQueue(void);

extern GenQue gl_GenQue;










#endif





